package com.lsh.controller;

import com.lsh.service.impl.ConfirmCallbackServiceImpl;
import com.lsh.service.impl.ReturnCallbackServiceImpl;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.Instant;

/**
 * @author ：LiuShihao
 * @date ：Created in 2021/3/18 9:54 下午
 * @desc ：
 */
@RestController
@RequestMapping("/mq")
public class RabbitController {
    @Autowired
    RabbitTemplate rabbitTemplate;

    @Autowired
    ConfirmCallbackServiceImpl confirmCallbackService;

    @Autowired
    ReturnCallbackServiceImpl returnCallbackService;

    @GetMapping("sendToMq")
    public String send(){
        /**
         * 确保消息发送失败后可以重新返回到队列中
         * 注意：yml需要配置 publisher-returns: true
         */
        rabbitTemplate.setMandatory(true);

        /**
         * 消费者确认收到消息后，手动ack回执回调处理
         */
        rabbitTemplate.setConfirmCallback(confirmCallbackService);

        /**
         * 消息投递到队列失败回调处理
         */
        rabbitTemplate.setReturnCallback(returnCallbackService);

        /**
         * 1.
         * 2.
         * 3.
         */
        //将消息投递到不存在的交换机
        rabbitTemplate.convertAndSend("queue1", Instant.now().toString());
        //将消息投递到存在的交换机
        rabbitTemplate.convertAndSend("queue", Instant.now().toString());
        return "发送成功！";

    }
}
